/**
 * 报错
 * @param msg
 */
export function toastErr(msg: string) {
	return uni.showToast({
		icon: "error",
		title: msg
	});
}
/**
 * 设置storage
 * @param key
 * @param value
 * @returns
 */
export function setStorage(key: string, value: any) {
	return uni.setStorage({
		key: key,
		data: value
	});
}
/**
 * 获取storage
 * @param key
 * @returns
 */
export function getStorage(key: string) {
	return uni.getStorageSync(key);
}
/**
 * 删除storage
 * @param key
 * @returns
 */
export function removeStorage(key: string) {
	return uni.removeStorage({
		key: key
	});
}
/**
 * 清空storage
 * @returns
 */
export function clearStorage() {
	return uni.clearStorage();
}

// 防抖函数
export function debounce(func: Function, wait: number, immediate: boolean) {
	let timeout: NodeJS.Timeout | null; // 定义一个计时器变量，用于延迟执行函数
	return function (this: any, ...args: any) {
		// 返回一个包装后的函数

		const later = () => {
			// 定义延迟执行的函数
			timeout = null; // 清空计时器变量
			if (!immediate) func.apply(this, args); // 若非立即执行，则调用待防抖函数
		};
		const callNow = immediate && !timeout; // 是否立即调用函数的条件
		clearTimeout(timeout as any); // 清空计时器
		timeout = setTimeout(later, wait); // 创建新的计时器，延迟执行函数
		if (callNow) func.apply(this, args); // 如果满足立即调用条件，则立即执行函数
	};
}

// 节流函数
export function throttle(func: Function, wait: number) {
	let timeout: NodeJS.Timeout | null; // 定义一个计时器变量，用于限制函数调用频率
	return function (this: any, ...args: any) {
		// 返回一个包装后的函数

		if (!timeout) {
			// 如果计时器不存在
			func.apply(this, args); // 执行函数
			timeout = setTimeout(() => {
				timeout = null; // 清空计时器变量
			}, wait); // 创建计时器，在指定时间后重置计时器变量
		}
	};
}
